﻿#include <stdio.h>
#include <string.h>


#define MAX_BOX_CAP 20000

int main() {
    // 1. 读箱子总容量
    int boxCapacity;
    scanf("%d", &boxCapacity);

    // 2. 读物品数量
    int itemNum; 
    scanf("%d", &itemNum);

    // 3. 读每个物品的体积，存到数组里
    int itemVolList[itemNum]; 
    for (int i = 0; i < itemNum; i++) {
        scanf("%d", &itemVolList[i]);
    }

    // 4. 初始化dp数组：dp[j]表示“能不能凑出体积j”（1=能，0=不能）
    int dp[MAX_BOX_CAP + 1];
    // 先把所有值设为0（默认“凑不出”）
    memset(dp, 0, sizeof(dp));
    // 特殊情况：体积0不用装任何东西，肯定能凑出，所以dp[0] = 1
    dp[0] = 1;

    // 5. 核心步骤：逐个物品试装，更新dp数组
    for (int i = 0; i < itemNum; i++) {  // 遍历每个物品
        int curItemVol = itemVolList[i];  // cur = current（当前的），当前物品的体积
        // 从大到小遍历体积！防止同一个物品被重复用（比如3的物品不能用两次凑6）
        // 最小遍历到curItemVol：凑j至少要当前物品的体积
        for (int j = boxCapacity; j >= curItemVol; j--) {
            // 逻辑：如果“j - 当前物品体积”能凑出（dp[j - curItemVol] = 1），
            // 那加上当前物品，j也能凑出，所以dp[j]设为1
            if (dp[j - curItemVol] == 1) {
                dp[j] = 1;
            }
        }
    }

    // 6. 找“最大能凑出的体积”（maxFillVol）
    int maxFillVol = 0;  // 最多能装的体积，初始0（什么都不装）
    // 从箱子容量往下找，第一个dp[j] = 1的就是最大的
    for (int j = boxCapacity; j >= 0; j--) {
        if (dp[j] == 1) {
            maxFillVol = j;
            break;  // 找到就退，因为从大到小找的，第一个就是最大的
        }
    }

    // 7. 算剩余空间：总容量 - 最多能装的体积
    int leftSpace = boxCapacity - maxFillVol;  // leftSpace = 剩下的空间
    printf("%d\n", leftSpace);

    return 0;
}